package com.xie.codegen.spi;

import java.lang.annotation.Annotation;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.TypeElement;

/**
 * @author gim
 */
public interface CodeGenProcessor {

  /**
   * 需要解析的类上的注解
   * @return
   */
  Class<? extends Annotation> getAnnotation();

  /**
   * 获取生成的包路径
   * @return
   */

  //*返回字段、方法、构造函数和成员类型
  //
  //*直接在此类或接口中声明的。
  //
  //*
  //
  //*这包括任何（隐式）默认构造函数和
  //
  //*
  //
  //*枚举类型。
  //  插入式注解处理器是JSR-269中定义的API
  String generatePackage(TypeElement typeElement);

  /**
   * 代码生成逻辑
   * @throws Exception
   *
   *
   */

  /**

   *如果这一轮生成的类型不会返回{@code true}

   *接受后续的注释处理；

   *否则返回{@code false}。

   *

   *@return{@code true}如果本轮生成的类型不会

   *接受后续的注释处理；

   *否则返回{@code false}

   */
  void generate(TypeElement typeElement, RoundEnvironment roundEnvironment) throws Exception;
}
